#include "stm32f10x.h"                  // Device header
#include "Delay.h"
void RC522_DELAY(void)
{
	Delay_us(20);

}
void MySPI_W_SS(uint8_t BitValue)
{
	GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)BitValue);

}

void MySPI_W_SCK(uint8_t BitValue)
{
	GPIO_WriteBit(GPIOA,GPIO_Pin_2,(BitAction)BitValue);

}

void MySPI_W_MOSI(uint8_t BitValue)
{
	GPIO_WriteBit(GPIOA,GPIO_Pin_3,(BitAction)BitValue);

}

uint8_t MySPI_R_MISO(void)
{
	
	return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6);

}
void MySPI_W_RST(uint8_t BitValue)
{
	GPIO_WriteBit(GPIOA,GPIO_Pin_4,(BitAction)BitValue);

}
void MySPI_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure; 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	
	MySPI_W_SS(1);
	MySPI_W_SCK(1);
	
	
}

void MySPI_Start(void)
{
	MySPI_W_SS(0);
}

void MySPI_Stop(void)
{
	MySPI_W_SS(1);
}

uint8_t MySPI_SwapByte(uint8_t ByteSend)
{
	uint8_t i, ByteReceive = 0x00;
	for(i = 0; i < 8; i++)
	{
		
		MySPI_W_SCK(0);
		RC522_DELAY();
		MySPI_W_MOSI(ByteSend & (0x80>>i));
		RC522_DELAY();
		MySPI_W_SCK(1);
		RC522_DELAY();
		if(MySPI_R_MISO() == 1)
		{
			ByteReceive |= (0x80>>i);
		}
	}
	
	return  ByteReceive;

}

